home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 002 / justify.arc / JUSTIFY.ASM next >
Encoding:
Assembly Source File  |  1984-05-30  |  70.5 KB  |  2,508 lines

  1.         PAGE  60,132
  2. TITLE JUSTIFY - PRINTER JUSTIFY PROGRAM
  3. JUS_STACK SEGMENT PARA STACK 'STACK'
  4.           DB    128 DUP('STACK   ')
  5. JUS_STACK    ENDS
  6. WORKAREA SEGMENT PARA  'DATA'
  7. AREA     DB    512 DUP(?)
  8. FCB      DB    2
  9. FILENAME DB    'PRNTFILE'
  10. EXTEN    DB    '   '
  11. CURBLK   DW    0
  12. RECSIZ   DW    0
  13. FILSIZ   DW    0
  14. DATE     DW    0
  15. TIME     DW    0
  16.          DB    '        '
  17. REC      DB    0
  18. RANREC   DD    0
  19. COL      DB    0
  20. TRTAB    DW    396 DUP(0)
  21.          DW              0B             ;!
  22.          DW              0B
  23.          DW              0B
  24.          DW              0B
  25.          DW              0B
  26.          DW      111100100B
  27.          DW      111100100B
  28.          DW              0B
  29.          DW              0B
  30.          DW              0B
  31.          DW              0B
  32.          DW              0B
  33.          DW              0B             ;"
  34.          DW              0B
  35.          DW              0B
  36.          DW      111000000B
  37.          DW      111000000B
  38.          DW              0B
  39.          DW              0B
  40.          DW      111000000B
  41.          DW      111000000B
  42.          DW              0B
  43.          DW              0B
  44.          DW              0B
  45.          DW              0B             ;#
  46.          DW        1010000B
  47.          DW        1010000B
  48.          DW      111111100B
  49.          DW      111111100B
  50.          DW        1010000B
  51.          DW        1010000B
  52.          DW      111111100B
  53.          DW      111111100B
  54.          DW        1010000B
  55.          DW        1010000B
  56.          DW              0B
  57.          DW              0B             ;$
  58.          DW        1100000B
  59.          DW       11101000B
  60.          DW       10101000B
  61.          DW       10101000B
  62.          DW      111111100B
  63.          DW      111111100B
  64.          DW       10101000B
  65.          DW       10101000B
  66.          DW       10111000B
  67.          DW         110000B
  68.          DW              0B
  69.          DW              0B             ;%
  70.          DW      111000000B
  71.          DW      111000100B
  72.          DW      101001000B
  73.          DW      111011000B
  74.          DW      111110000B
  75.          DW        1111100B
  76.          DW       11011100B
  77.          DW      110011000B
  78.          DW      100011100B
  79.          DW          11100B
  80.          DW              0B
  81.          DW              0B             ;&
  82.          DW              0B
  83.          DW              0B
  84.          DW       11001100B
  85.          DW      111011110B
  86.          DW      100110110B
  87.          DW      101111100B
  88.          DW       11011100B
  89.          DW      111011000B
  90.          DW         111100B
  91.          DW         100100B
  92.          DW              0B
  93.          DW              0B             ;'
  94.          DW              0B
  95.          DW              0B
  96.          DW              0B
  97.          DW              0B
  98.          DW      110100000B
  99.          DW      111100000B
  100.          DW      111000000B
  101.          DW              0B
  102.          DW              0B
  103.          DW              0B
  104.          DW              0B
  105.          DW              0B             ;(
  106.          DW              0B
  107.          DW              0B
  108.          DW              0B
  109.          DW        1110000B
  110.          DW       11111000B
  111.          DW      110001100B
  112.          DW      100000100B
  113.          DW              0B
  114.          DW              0B
  115.          DW              0B
  116.          DW              0B
  117.          DW              0B             ;)
  118.          DW              0B
  119.          DW              0B
  120.          DW              0B
  121.          DW      100000100B
  122.          DW      110001100B
  123.          DW       11111000B
  124.          DW        1110000B
  125.          DW              0B
  126.          DW              0B
  127.          DW              0B
  128.          DW              0B
  129.          DW              0B             ;*
  130.          DW         100000B
  131.          DW       10101000B
  132.          DW       11111000B
  133.          DW        1110000B
  134.          DW      111111100B
  135.          DW      111111100B
  136.          DW        1110000B
  137.          DW       11111000B
  138.          DW       10101000B
  139.          DW         100000B
  140.          DW              0B
  141.          DW              0B             ;+
  142.          DW         100000B
  143.          DW         100000B
  144.          DW         100000B
  145.          DW         100000B
  146.          DW      111111100B
  147.          DW      111111100B
  148.          DW         100000B
  149.          DW         100000B
  150.          DW         100000B
  151.          DW         100000B
  152.          DW              0B
  153.          DW              0B             ;,
  154.          DW              0B
  155.          DW              0B
  156.          DW              0B
  157.          DW           1101B
  158.          DW           1111B
  159.          DW           1110B
  160.          DW              0B
  161.          DW              0B
  162.          DW              0B
  163.          DW              0B
  164.          DW              0B
  165.          DW              0B             ;-
  166.          DW              0B
  167.          DW         100000B
  168.          DW         100000B
  169.          DW         100000B
  170.          DW         100000B
  171.          DW         100000B
  172.          DW         100000B
  173.          DW         100000B
  174.          DW         100000B
  175.          DW              0B
  176.          DW              0B
  177.          DW              0B             ;.
  178.          DW              0B
  179.          DW              0B
  180.          DW              0B
  181.          DW           1100B
  182.          DW           1100B
  183.          DW           1100B
  184.          DW              0B
  185.          DW              0B
  186.          DW              0B
  187.          DW              0B
  188.          DW              0B
  189.          DW              0B            ;/
  190.          DW              0B
  191.          DW            100B
  192.          DW           1100B
  193.          DW          11000B
  194.          DW         110000B
  195.          DW        1100000B
  196.          DW       11000000B
  197.          DW      110000000B
  198.          DW      100000000B
  199.          DW              0B
  200.          DW              0B
  201.          DW              0B             ;0
  202.          DW              0B
  203.          DW        1110000B
  204.          DW       11111000B
  205.          DW      110001100B
  206.          DW      100000100B
  207.          DW      100000100B
  208.          DW      110001100B
  209.          DW       11111000B
  210.          DW        1110000B
  211.          DW              0B
  212.          DW              0B
  213.          DW              0B             ;1
  214.          DW              0B
  215.          DW              0B
  216.          DW       10000100B
  217.          DW      110000100B
  218.          DW      111111100B
  219.          DW      111111100B
  220.          DW            100B
  221.          DW            100B
  222.          DW              0B
  223.          DW              0B
  224.          DW              0B
  225.          DW              0B             ;2
  226.          DW              0B
  227.          DW              0B
  228.          DW       10000100B
  229.          DW      110001100B
  230.          DW      100011100B
  231.          DW      100110100B
  232.          DW      101100100B
  233.          DW      111000100B
  234.          DW      110000100B
  235.          DW              0B
  236.          DW              0B
  237.          DW              0B             ;3
  238.          DW              0B
  239.          DW              0B
  240.          DW      100000100B
  241.          DW      100000100B
  242.          DW      100000100B
  243.          DW      101000100B
  244.          DW      111100100B
  245.          DW      110111100B
  246.          DW      100011100B
  247.          DW              0B
  248.          DW              0B
  249.          DW              0B             ;4
  250.          DW              0B
  251.          DW          10000B
  252.          DW         110000B
  253.          DW        1110000B
  254.          DW       11010000B
  255.          DW      110010000B
  256.          DW      111111100B
  257.          DW      111111100B
  258.          DW          10000B
  259.          DW          10000B
  260.          DW              0B
  261.          DW              0B             ;5
  262.          DW              0B
  263.          DW      111101000B
  264.          DW      111101100B
  265.          DW      100100100B
  266.          DW      100100100B
  267.          DW      100100100B
  268.          DW      100111100B
  269.          DW      100011100B
  270.          DW      100000000B
  271.          DW              0B
  272.          DW              0B
  273.          DW              0B             ;6
  274.          DW              0B
  275.          DW              0B
  276.          DW        1110000B
  277.          DW       11111000B
  278.          DW      110101100B
  279.          DW      100100100B
  280.          DW         100100B
  281.          DW         111100B
  282.          DW          11000B
  283.          DW              0B
  284.          DW              0B
  285.          DW              0B             ;7
  286.          DW              0B
  287.          DW      100000100B
  288.          DW      100001100B
  289.          DW      100011000B
  290.          DW      100110000B
  291.          DW      101100000B
  292.          DW      111000000B
  293.          DW      110000000B
  294.          DW      100000000B
  295.          DW              0B
  296.          DW              0B
  297.          DW              0B             ;8
  298.          DW              0B
  299.          DW       11011000B
  300.          DW      111111100B
  301.          DW      100100100B
  302.          DW      100100100B
  303.          DW      100100100B
  304.          DW      100100100B
  305.          DW      111111100B
  306.          DW       11011000B
  307.          DW              0B
  308.          DW              0B
  309.          DW              0B             ;9
  310.          DW              0B
  311.          DW       11000000B
  312.          DW      111100000B
  313.          DW      100100000B
  314.          DW      100100100B
  315.          DW      100101100B
  316.          DW      100111000B
  317.          DW      111110000B
  318.          DW       11100000B
  319.          DW              0B
  320.          DW              0B
  321.          DW              0B            ;:
  322.          DW              0B
  323.          DW              0B
  324.          DW              0B
  325.          DW              0B
  326.          DW       11001100B
  327.          DW       11001100B
  328.          DW       11001100B
  329.          DW              0B
  330.          DW              0B
  331.          DW              0B
  332.          DW              0B
  333.          DW              0B            ;;
  334.          DW              0B
  335.          DW              0B
  336.          DW              0B
  337.          DW              0B
  338.          DW       11001101B
  339.          DW       11001111B
  340.          DW       11001110B
  341.          DW              0B
  342.          DW              0B
  343.          DW              0B
  344.          DW              0B
  345.          DW              0B            ;<
  346.          DW              0B
  347.          DW              0B
  348.          DW              0B
  349.          DW         100000B
  350.          DW        1110000B
  351.          DW       11011000B
  352.          DW      110001100B
  353.          DW     1000000100B
  354.          DW              0B
  355.          DW              0B
  356.          DW              0B
  357.          DW              0B            ;=
  358.          DW              0B
  359.          DW              0B
  360.          DW        1010000B
  361.          DW        1010000B
  362.          DW        1010000B
  363.          DW        1010000B
  364.          DW        1010000B
  365.          DW        1010000B
  366.          DW              0B
  367.          DW              0B
  368.          DW              0B
  369.          DW              0B            ;>
  370.          DW              0B
  371.          DW              0B
  372.          DW              0B
  373.          DW      100000100B
  374.          DW      110001100B
  375.          DW       11011000B
  376.          DW        1110000B
  377.          DW         100000B
  378.          DW              0B
  379.          DW              0B
  380.          DW              0B
  381.          DW              0B            ;?
  382.          DW              0B
  383.          DW       10000000B
  384.          DW      110000000B
  385.          DW      100000000B
  386.          DW      100110100B
  387.          DW      100100100B
  388.          DW      100100000B
  389.          DW      111000000B
  390.          DW       11000000B
  391.          DW              0B
  392.          DW              0B
  393.          DW              0B            ;@
  394.          DW       11111000B
  395.          DW      111111100B
  396.          DW      100000100B
  397.          DW      100000100B
  398.          DW      100100100B
  399.          DW      101110100B
  400.          DW      101010100B
  401.          DW      101010100B
  402.          DW      101010100B
  403.          DW      111110100B
  404.          DW       11110100B
  405.          DW              0B             ;A
  406.          DW        1111100B
  407.          DW       11111100B
  408.          DW       10010000B
  409.          DW       10010000B
  410.          DW      100010000B
  411.          DW      100010000B
  412.          DW       10010000B
  413.          DW       10010000B
  414.          DW       11111100B
  415.          DW        1111100B
  416.          DW              0B
  417.          DW              0B             ;B
  418.          DW              0B
  419.          DW      100000100B
  420.          DW      111111100B
  421.          DW      111111100B
  422.          DW      100100100B
  423.          DW      100100100B
  424.          DW      100100100B
  425.          DW      100100100B
  426.          DW      111111100B
  427.          DW       11011000B
  428.          DW              0B
  429.          DW              0B             ;C
  430.          DW              0B
  431.          DW       11111000B
  432.          DW      111111100B
  433.          DW      100000100B
  434.          DW      100000100B
  435.          DW      100000100B
  436.          DW      100000100B
  437.          DW      100000100B
  438.          DW      110001100B
  439.          DW       10001000B
  440.          DW              0B
  441.          DW              0B             ;D
  442.          DW      100000100B
  443.          DW      100000100B
  444.          DW      111111100B
  445.          DW      111111100B
  446.          DW      100000100B
  447.          DW      100000100B
  448.          DW      100000100B
  449.          DW      100000100B
  450.          DW       11111000B
  451.          DW       11111000B
  452.          DW              0B
  453.          DW              0B             ;E
  454.          DW              0B
  455.          DW      111111100B
  456.          DW      111111100B
  457.          DW      100100100B
  458.          DW      100100100B
  459.          DW      100100100B
  460.          DW      100100100B
  461.          DW      100000100B
  462.          DW      100000100B
  463.          DW              0B
  464.          DW              0B
  465.          DW              0B             ;F
  466.          DW              0B
  467.          DW      111111100B
  468.          DW      111111100B
  469.          DW      100100000B
  470.          DW      100100000B
  471.          DW      100100000B
  472.          DW      100100000B
  473.          DW      100000000B
  474.          DW      100000000B
  475.          DW              0B
  476.          DW              0B
  477.          DW              0B             ;G
  478.          DW       11111000B
  479.          DW      111111100B
  480.          DW      100000100B
  481.          DW      100000100B
  482.          DW      100100100B
  483.          DW      100100100B
  484.          DW      100100100B
  485.          DW      100100100B
  486.          DW      100111100B
  487.          DW         111000B
  488.          DW              0B
  489.          DW              0B             ;H
  490.          DW              0B
  491.          DW      111111100B
  492.          DW      111111100B
  493.          DW         100000B
  494.          DW         100000B
  495.          DW         100000B
  496.          DW         100000B
  497.          DW      111111100B
  498.          DW      111111100B
  499.          DW              0B
  500.          DW              0B
  501.          DW              0B             ;I
  502.          DW              0B
  503.          DW              0B
  504.          DW      100000100B
  505.          DW      100000100B
  506.          DW      111111100B
  507.          DW      111111100B
  508.          DW      100000100B
  509.          DW      100000100B
  510.          DW              0B
  511.          DW              0B
  512.          DW              0B
  513.          DW              0B             ;J
  514.          DW              0B
  515.          DW          11000B
  516.          DW          11100B
  517.          DW            100B
  518.          DW      100000100B
  519.          DW      100000100B
  520.          DW      111111100B
  521.          DW      111111000B
  522.          DW      100000000B
  523.          DW      100000000B
  524.          DW              0B
  525.          DW              0B             ;K
  526.          DW              0B
  527.          DW      111111100B
  528.          DW      111111100B
  529.          DW         100000B
  530.          DW        1110000B
  531.          DW        1110000B
  532.          DW       11011000B
  533.          DW      110001100B
  534.          DW      100000100B
  535.          DW              0B
  536.          DW              0B
  537.          DW              0B             ;L
  538.          DW      111111100B
  539.          DW      111111100B
  540.          DW            100B
  541.          DW            100B
  542.          DW            100B
  543.          DW            100B
  544.          DW            100B
  545.          DW            100B
  546.          DW            100B
  547.          DW              0B
  548.          DW              0B
  549.          DW              0B             ;M
  550.          DW      111111100B
  551.          DW      111111100B
  552.          DW      100000000B
  553.          DW      110000000B
  554.          DW       11000000B
  555.          DW       11000000B
  556.          DW      110000000B
  557.          DW      100000000B
  558.          DW      111111100B
  559.          DW      111111100B
  560.          DW              0B
  561.          DW              0B             ;N
  562.          DW              0B
  563.          DW      111111100B
  564.          DW      111111100B
  565.          DW      110000000B
  566.          DW       11000000B
  567.          DW        1100000B
  568.          DW         110000B
  569.          DW      111111100B
  570.          DW      111111100B
  571.          DW              0B
  572.          DW              0B
  573.          DW              0B             ;O
  574.          DW       11111000B
  575.          DW      111111100B
  576.          DW      100000100B
  577.          DW      100000100B
  578.          DW      100000100B
  579.          DW      100000100B
  580.          DW      100000100B
  581.          DW      100000100B
  582.          DW      111111100B
  583.          DW       11111000B
  584.          DW              0B
  585.          DW              0B             ;P
  586.          DW      111111100B
  587.          DW      111111100B
  588.          DW      100100000B
  589.          DW      100100000B
  590.          DW      100100000B
  591.          DW      100100000B
  592.          DW      100100000B
  593.          DW      100100000B
  594.          DW       11000000B
  595.          DW       11000000B
  596.          DW              0B
  597.          DW              0B             ;Q
  598.          DW       11111000B
  599.          DW      111111100B
  600.          DW      100000100B
  601.          DW      100000100B
  602.          DW      100000100B
  603.          DW      100100100B
  604.          DW      100010100B
  605.          DW      100001000B
  606.          DW      111111100B
  607.          DW       11111100B
  608.          DW              0B
  609.          DW              0B             ;R
  610.          DW              0B
  611.          DW      111111100B
  612.          DW      111111100B
  613.          DW      100100000B
  614.          DW      100100000B
  615.          DW      100100000B
  616.          DW      100110000B
  617.          DW      100111000B
  618.          DW      111101100B
  619.          DW       11000100B
  620.          DW              0B
  621.          DW              0B             ;S
  622.          DW       11001000B
  623.          DW      111101100B
  624.          DW      100100100B
  625.          DW      100100100B
  626.          DW      100100100B
  627.          DW      100100100B
  628.          DW      100100100B
  629.          DW      100100100B
  630.          DW      110111100B
  631.          DW       10011000B
  632.          DW              0B
  633.          DW              0B             ;T
  634.          DW      100000000B
  635.          DW      100000000B
  636.          DW      100000000B
  637.          DW      100000000B
  638.          DW      111111100B
  639.          DW      111111100B
  640.          DW      100000000B
  641.          DW      100000000B
  642.          DW      100000000B
  643.          DW      100000000B
  644.          DW              0B
  645.          DW              0B             ;U
  646.          DW      111111000B
  647.          DW      111111100B
  648.          DW            100B
  649.          DW            100B
  650.          DW            100B
  651.          DW            100B
  652.          DW            100B
  653.          DW            100B
  654.          DW      111111100B
  655.          DW      111111000B
  656.          DW              0B
  657.          DW              0B             ;V
  658.          DW              0B
  659.          DW      111000000B
  660.          DW      111100000B
  661.          DW         110000B
  662.          DW          11000B
  663.          DW           1100B
  664.          DW          11000B
  665.          DW         110000B
  666.          DW      111100000B
  667.          DW      111000000B
  668.          DW              0B
  669.          DW              0B             ;W
  670.          DW      111111100B
  671.          DW      111111100B
  672.          DW          11000B
  673.          DW         110000B
  674.          DW        1100000B
  675.          DW        1100000B
  676.          DW         110000B
  677.          DW          11000B
  678.          DW      111111100B
  679.          DW      111111100B
  680.          DW              0B
  681.          DW              0B             ;X
  682.          DW              0B
  683.          DW      100000100B
  684.          DW      110001100B
  685.          DW       11011000B
  686.          DW        1110000B
  687.          DW         100000B
  688.          DW        1110000B
  689.          DW       11011000B
  690.          DW      110001100B
  691.          DW      100000100B
  692.          DW              0B
  693.          DW              0B             ;Y
  694.          DW      100000000B
  695.          DW      110000000B
  696.          DW       11000000B
  697.          DW        1100000B
  698.          DW         111100B
  699.          DW         111100B
  700.          DW        1100000B
  701.          DW       11000000B
  702.          DW      110000000B
  703.          DW      100000000B
  704.          DW              0B
  705.          DW              0B             ;Z
  706.          DW              0B
  707.          DW      100000100B
  708.          DW      100001100B
  709.          DW      100011100B
  710.          DW      100110100B
  711.          DW      101100100B
  712.          DW      111000100B
  713.          DW      110000100B
  714.          DW      100000100B
  715.          DW              0B
  716.          DW              0B
  717.          DW              0B            ;[
  718.          DW              0B
  719.          DW              0B
  720.          DW      111111100B
  721.          DW      111111100B
  722.          DW      100000100B
  723.          DW      100000100B
  724.          DW      100000100B
  725.          DW              0B
  726.          DW              0B
  727.          DW              0B
  728.          DW              0B
  729.          DW              0B            ;\
  730.          DW              0B
  731.          DW      100000000B
  732.          DW      110000000B
  733.          DW       11000000B
  734.          DW        1100000B
  735.          DW         110000B
  736.          DW          11000B
  737.          DW           1100B
  738.          DW              0B
  739.          DW              0B
  740.          DW              0B
  741.          DW              0B            ;]
  742.          DW              0B
  743.          DW              0B
  744.          DW      100000100B
  745.          DW      100000100B
  746.          DW      100000100B
  747.          DW      100000100B
  748.          DW      111111100B
  749.          DW      111111100B
  750.          DW              0B
  751.          DW              0B
  752.          DW              0B
  753.          DW    12 DUP(0)
  754.          DW              0B             ;_
  755.          DW              0B
  756.          DW              1B
  757.          DW              1B
  758.          DW              1B
  759.          DW              1B
  760.          DW              1B
  761.          DW              1B
  762.          DW              1B
  763.          DW              1B
  764.          DW              0B
  765.          DW              0B
  766.          DW              0B             ;`
  767.          DW              0B
  768.          DW              0B
  769.          DW              0B
  770.          DW              0B
  771.          DW      111000000B
  772.          DW      111100000B
  773.          DW      110100000B
  774.          DW              0B
  775.          DW              0B
  776.          DW              0B
  777.          DW              0B
  778.          DW              0B             ;a
  779.          DW           1000B
  780.          DW        1011100B
  781.          DW        1010100B
  782.          DW        1010100B
  783.          DW        1010100B
  784.          DW        1010100B
  785.          DW        1010100B
  786.          DW        1011100B
  787.          DW         111000B
  788.          DW            100B
  789.          DW              0B
  790.          DW              0B             ;b
  791.          DW              0B
  792.          DW      111111100B
  793.          DW      111111100B
  794.          DW        1000100B
  795.          DW        1000100B
  796.          DW        1000100B
  797.          DW        1000100B
  798.          DW        1111100B
  799.          DW         111000B
  800.          DW              0B
  801.          DW              0B
  802.          DW              0B             ;c
  803.          DW              0B
  804.          DW         111000B
  805.          DW        1111100B
  806.          DW        1000100B
  807.          DW        1000100B
  808.          DW        1000100B
  809.          DW        1000100B
  810.          DW        1000100B
  811.          DW        1000100B
  812.          DW        1000100B
  813.          DW              0B
  814.          DW              0B             ;d
  815.          DW              0B
  816.          DW         111000B
  817.          DW        1101100B
  818.          DW        1000100B
  819.          DW        1000100B
  820.          DW        1000100B
  821.          DW        1000100B
  822.          DW        1000100B
  823.          DW      111111100B
  824.          DW      111111100B
  825.          DW              0B
  826.          DW              0B             ;e
  827.          DW         111000B
  828.          DW        1101100B
  829.          DW        1010100B
  830.          DW        1010100B
  831.          DW        1010100B
  832.          DW        1010100B
  833.          DW        1010100B
  834.          DW        1110100B
  835.          DW         110000B
  836.          DW              0B
  837.          DW              0B
  838.          DW              0B             ;f
  839.          DW              0B
  840.          DW              0B
  841.          DW         100000B
  842.          DW         100000B
  843.          DW       11111100B
  844.          DW      111111100B
  845.          DW      100100000B
  846.          DW      100100000B
  847.          DW      100000000B
  848.          DW              0B
  849.          DW              0B
  850.          DW              0B             ;g
  851.          DW              0B
  852.          DW         111000B
  853.          DW        1101100B
  854.          DW        1000101B
  855.          DW        1000101B
  856.          DW        1000101B
  857.          DW        1000101B
  858.          DW        1111101B
  859.          DW        1111111B
  860.          DW             10B
  861.          DW              0B
  862.          DW              0B             ;h
  863.          DW              0B
  864.          DW      111111100B
  865.          DW      111111100B
  866.          DW        1000000B
  867.          DW        1000000B
  868.          DW        1000000B
  869.          DW        1000000B
  870.          DW        1000000B
  871.          DW        1111100B
  872.          DW         111100B
  873.          DW              0B
  874.          DW              0B             ;i
  875.          DW              0B
  876.          DW              0B
  877.          DW        1000100B
  878.          DW        1000100B
  879.          DW      101111100B
  880.          DW      101111100B
  881.          DW            100B
  882.          DW            100B
  883.          DW              0B
  884.          DW              0B
  885.          DW              0B
  886.          DW              0B             ;j
  887.          DW              0B
  888.          DW              0B
  889.          DW              0B
  890.          DW              1B
  891.          DW        1000001B
  892.          DW        1000001B
  893.          DW      101111111B
  894.          DW      101111111B
  895.          DW              0B
  896.          DW              0B
  897.          DW              0B
  898.          DW              0B             ;k
  899.          DW              0B
  900.          DW              0B
  901.          DW      111111100B
  902.          DW      111111100B
  903.          DW          10000B
  904.          DW         111000B
  905.          DW        1101100B
  906.          DW        1000100B
  907.          DW              0B
  908.          DW              0B
  909.          DW              0B
  910.          DW              0B             ;l
  911.          DW              0B
  912.          DW              0B
  913.          DW              0B
  914.          DW      100000100B
  915.          DW      100000100B
  916.          DW      111111100B
  917.          DW      111111100B
  918.          DW            100B
  919.          DW            100B
  920.          DW              0B
  921.          DW              0B
  922.          DW              0B             ;m
  923.          DW        1111100B
  924.          DW        1111100B
  925.          DW        1000000B
  926.          DW        1000000B
  927.          DW         111100B
  928.          DW        1111100B
  929.          DW        1000000B
  930.          DW        1000000B
  931.          DW        1111100B
  932.          DW         111100B
  933.          DW              0B
  934.          DW              0B             ;n
  935.          DW              0B
  936.          DW        1111100B
  937.          DW        1111100B
  938.          DW        1000000B
  939.          DW        1000000B
  940.          DW        1000000B
  941.          DW        1000000B
  942.          DW        1000000B
  943.          DW         111100B
  944.          DW         111100B
  945.          DW              0B
  946.          DW              0B             ;O
  947.          DW              0B
  948.          DW         111000B
  949.          DW        1111100B
  950.          DW        1000100B
  951.          DW        1000100B
  952.          DW        1000100B
  953.          DW        1000100B
  954.          DW        1000100B
  955.          DW        1111100B
  956.          DW         111000B
  957.          DW              0B
  958.          DW              0B             ;p
  959.          DW              0B
  960.          DW        1111111B
  961.          DW        1111111B
  962.          DW        1000100B
  963.          DW        1000100B
  964.          DW        1000100B
  965.          DW        1000100B
  966.          DW        1000100B
  967.          DW        1111100B
  968.          DW         111000B
  969.          DW              0B
  970.          DW              0B             ;q
  971.          DW              0B
  972.          DW         111000B
  973.          DW        1111100B
  974.          DW        1000100B
  975.          DW        1000100B
  976.          DW        1000100B
  977.          DW        1000100B
  978.          DW        1000100B
  979.          DW        1111111B
  980.          DW        1111111B
  981.          DW              0B
  982.          DW              0B             ;r
  983.          DW              0B
  984.          DW        1111100B
  985.          DW        1111100B
  986.          DW         100000B
  987.          DW        1000000B
  988.          DW        1000000B
  989.          DW        1000000B
  990.          DW        1000000B
  991.          DW        1000000B
  992.          DW              0B
  993.          DW              0B
  994.          DW              0B             ;s
  995.          DW              0B
  996.          DW        1110100B
  997.          DW        1110100B
  998.          DW        1010100B
  999.          DW        1010100B
  1000.          DW        1010100B
  1001.          DW        1010100B
  1002.          DW        1011100B
  1003.          DW        1011100B
  1004.          DW              0B
  1005.          DW              0B
  1006.          DW              0B             ;t
  1007.          DW              0B
  1008.          DW        1000000B
  1009.          DW        1000000B
  1010.          DW      111111000B
  1011.          DW      111111100B
  1012.          DW        1000100B
  1013.          DW        1000100B
  1014.          DW        1000100B
  1015.          DW            100B
  1016.          DW            100B
  1017.          DW              0B
  1018.          DW              0B             ;u
  1019.          DW              0B
  1020.          DW        1111000B
  1021.          DW        1111100B
  1022.          DW            100B
  1023.          DW            100B
  1024.          DW            100B
  1025.          DW            100B
  1026.          DW        1111100B
  1027.          DW        1111000B
  1028.          DW            100B
  1029.          DW              0B
  1030.          DW              0B             ;v
  1031.          DW              0B
  1032.          DW        1000000B
  1033.          DW        1100000B
  1034.          DW         110000B
  1035.          DW          11000B
  1036.          DW           1100B
  1037.          DW          11000B
  1038.          DW         110000B
  1039.          DW        1100000B
  1040.          DW        1000000B
  1041.          DW              0B
  1042.          DW              0B             ;w
  1043.          DW              0B
  1044.          DW        1111100B
  1045.          DW        1111100B
  1046.          DW           1000B
  1047.          DW          10000B
  1048.          DW         100000B
  1049.          DW          10000B
  1050.          DW           1000B
  1051.          DW        1111100B
  1052.          DW        1111100B
  1053.          DW              0B
  1054.          DW              0B             ;x
  1055.          DW              0B
  1056.          DW              0B
  1057.          DW        1101100B
  1058.          DW         111000B
  1059.          DW          10000B
  1060.          DW          10000B
  1061.          DW         111000B
  1062.          DW        1101100B
  1063.          DW              0B
  1064.          DW              0B
  1065.          DW              0B
  1066.          DW              0B             ;y
  1067.          DW              0B
  1068.          DW        1000000B
  1069.          DW        1100001B
  1070.          DW         110011B
  1071.          DW          11110B
  1072.          DW            100B
  1073.          DW          11000B
  1074.          DW         110000B
  1075.          DW        1100000B
  1076.          DW        1000000B
  1077.          DW              0B
  1078.          DW              0B             ;z
  1079.          DW              0B
  1080.          DW        1000100B
  1081.          DW        1001100B
  1082.          DW        1001100B
  1083.          DW        1010100B
  1084.          DW        1010100B
  1085.          DW        1110100B
  1086.          DW        1100100B
  1087.          DW        1000100B
  1088.          DW              0B
  1089.          DW              0B
  1090.          DW              0B             ;{
  1091.          DW              0B
  1092.          DW              0B
  1093.          DW              0B
  1094.          DW         100000B
  1095.          DW      111011100B
  1096.          DW      110001100B
  1097.          DW      100000100B
  1098.          DW      100000100B
  1099.          DW              0B
  1100.          DW              0B
  1101.          DW              0B
  1102.          DW    12 DUP(0)
  1103.          DW              0B             ;}
  1104.          DW              0B
  1105.          DW              0B
  1106.          DW              0B
  1107.          DW      100000100B
  1108.          DW      100000100B
  1109.          DW      110001100B
  1110.          DW      111011100B
  1111.          DW         100000B
  1112.          DW              0B
  1113.          DW              0B
  1114.          DW              0B
  1115.          DW    1032 DUP(0)
  1116.          DW              0B             ;¢
  1117.          DW              0B
  1118.          DW        1110000B
  1119.          DW       11111000B
  1120.          DW       10001000B
  1121.          DW       10001000B
  1122.          DW      111111100B
  1123.          DW      111111100B
  1124.          DW       10001000B
  1125.          DW       10001000B
  1126.          DW              0B
  1127.          DW              0B
  1128.          DW    1560 DUP(0)
  1129. LINE2    DB 128 DUP(32)
  1130.          DB    255
  1131. L1       DB 960 DUP(0)
  1132.          DB    255
  1133. L2       DB 960 DUP(0)
  1134.          DB    255
  1135.          DB    970 DUP(255)
  1136. COL59    DB    0
  1137. HCOL     DB    0
  1138. LCOL     DB    0
  1139. C12      DB    12
  1140. IBITS    DW    0
  1141. IREM     DW    0
  1142. C24      DB    24
  1143. L1SUB    DW    0
  1144. HSI1     DW    0
  1145. HSI2     DW    0
  1146. HSI3     DW    0
  1147. HSI4     DW    0
  1148. HSI5     DW    0
  1149. HSI6     DW    0
  1150. HSI9     DW    0
  1151. HSI7     DW    0
  1152. HBYTE1   DB    0
  1153. HBYTE2   DB    0
  1154. HWORD    DW    0
  1155. ENDSW    DW    0
  1156. LINCNT   DW    0
  1157. PAGESIZE DW    61
  1158. HOLDDX   DW    0
  1159. PRTPRMPT DB    'ENTER PRINTER TYPE         1 = IBM'
  1160.          DB    0DH
  1161.          DB    0AH
  1162.          DB    0AH
  1163.          DB    '                           2 = EPSON MX80 OR MX100'
  1164.          DB    0DH
  1165.          DB    0AH
  1166.          DB    0AH
  1167.          DB    '                           3 = EPSON FX80 OR FX100'
  1168.          DB    0DH
  1169.          DB    0AH
  1170.          DB    0AH
  1171.          DB    '                           4 = STAR MICRONICS GEMINI 10X OR 15X'
  1172.          DB    0DH
  1173.          DB    0AH
  1174.          DB    0AH
  1175.          DB    '                           5 = STAR MICRONICS DELTA 10 OR 15'
  1176.          DB    0DH
  1177.          DB    0AH
  1178.          DB    0AH
  1179.          DB    '<1>'
  1180.          DB    24H
  1181. PRMPEL   DB    0DH
  1182.          DB    0AH
  1183.          DB    'ENTER LAST LINE ON PAGE'
  1184.          DB    0DH
  1185.          DB    0AH
  1186.          DB    '<60> '
  1187.          DB    24H
  1188. PRMPPS   DB    0DH
  1189.          DB    0AH
  1190.          DB    'ENTER LINES PER PAGE'
  1191.          DB    0DH
  1192.          DB    0AH
  1193.          DB    '<66> '
  1194.          DB    24H
  1195. PRMPFN   DB    0DH
  1196.          DB    0AH
  1197.          DB    'ENTER FILE NAME'
  1198.          DB    0DH
  1199.          DB    0AH
  1200.          DB    '<B:PRNTFILE>'
  1201.          DB    24H
  1202. PRMPLM   DB    0DH
  1203.          DB    0AH
  1204.          DB    'ENTER LEFT MARGIN'
  1205.          DB    0DH
  1206.          DB    0AH
  1207.          DB    '<1>'
  1208.          DB    24H
  1209. PRMPRM   DB    0DH
  1210.          DB    0AH
  1211.          DB    'ENTER RIGHT MARGIN'
  1212.          DB    0DH
  1213.          DB    0AH
  1214.          DB    '<80>'
  1215.          DB    24H
  1216. PRMPSL   DB    0DH
  1217.          DB    0AH
  1218.          DB    'ENTER STARTING LINE'
  1219.          DB    0DH
  1220.          DB    0AH
  1221.          DB    '<6>'
  1222.          DB    24H
  1223. PERR     DB    0DH
  1224.          DB    0AH
  1225.          DB    'PRINTER ERROR'
  1226.          DB    0DH
  1227.          DB    0AH
  1228.          DB    24H
  1229. OPAPR    DB    0DH
  1230.          DB    0AH
  1231.          DB    'PUT PAPER IN PRINTER THEN HIT ENTER'
  1232.          DB    0DH
  1233.          DB    0AH
  1234.          DB    24H
  1235. TOUT     DB    0DH
  1236.          DB    0AH
  1237.          DB    'ENABLE PRINTER THEN HIT ENTER'
  1238.          DB    0DH
  1239.          DB    0AH
  1240.          DB    24H
  1241. OPNERR   DB    0DH
  1242.          DB    0AH
  1243.          DB    'FILE NOT FOUND'
  1244.          DB    0DH
  1245.          DB    0AH
  1246.          DB    24H
  1247. ENDMSG   DB    0DH
  1248.          DB    0AH
  1249.          DB    'TO END PROGRAM, TYPE "E"'
  1250.          DB    0DH
  1251.          DB    0AH
  1252.          DB    24H
  1253. COPYRITE DB    '                           COPYRIGHT (C) 1984 COMFAX'
  1254.          DB    0DH
  1255.          DB    0AH
  1256.          DB    0AH
  1257.          DB    0AH
  1258.          DB    24H
  1259. PRNAME   DB    '                               JUSTIFY BY COMFAX'
  1260.          DB    0DH
  1261.          DB    0AH
  1262.          DB    0AH
  1263.          DB    24H
  1264. BUFFER   DB    20
  1265.          DB    64 DUP(0)
  1266. PRTRCODE DB    '1'
  1267. LMARG    DW    1
  1268. RMARG    DW    80
  1269. SLINE    DW    6
  1270. ELINE    DW    60
  1271. PAGSIZ   DW    66
  1272. FILNAM   DB    13 DUP(32)
  1273. PGCOMD   DB    2
  1274.          DB    '66       '
  1275. SPAC16   DB    27
  1276.          DB    65
  1277.          DB    12
  1278. SPAC19   DB    27
  1279.          DB    65
  1280.          DB    8
  1281. SPAC118  DB    27
  1282.          DB    65
  1283.          DB    4
  1284. DIRPRE   DB    '   '
  1285. DIRAREA  DB    64 DUP(0)
  1286. DIR2PRE  DB    '  '
  1287. DIR2AREA DB    64 DUP(0)
  1288. HOLDBX   DW    0
  1289. PATHSW   DB    0
  1290. HOLDAL   DB    0
  1291. DEFAULT  DB    0
  1292. HOLDDRIV DB    0
  1293. INDENT   DW    0
  1294. HMAR     DB    '   '
  1295. WORKAREA ENDS
  1296. EXTRA    SEGMENT PARA  'DATA'
  1297. LINE1    DB 128 DUP(32)
  1298.          DB    255
  1299. EXTRA    ENDS
  1300. JUS_CSEG SEGMENT PARA  'CODE'
  1301. JUS_PROC PROC FAR
  1302.          ASSUME CS:JUS_CSEG,DS:WORKAREA,SS:JUS_STACK,ES:EXTRA
  1303.          PUSH  DS              ;Set return segment addr to stack
  1304.          SUB   AX,AX             ;Clear a reg
  1305.          PUSH  AX                ;Put zero return addr to stack
  1306.          STI                     ;ENABLE INTERRUPTS
  1307.          MOV   AX,SEG WORKAREA   ;SET SEGREG BASE OF DATA BUFFER
  1308.          MOV   DS,AX
  1309.          MOV   AX,SEG EXTRA      ;SET SEGREG BASE
  1310.          MOV   ES,AX
  1311.          MOV   AH,19H            ;GET DEFAULT DRIVE
  1312.          INT   21H
  1313.          ADD   AL,41H
  1314.          MOV   DEFAULT,AL
  1315. CLSCR:   MOV   AX,600H        ;CLEAR SCREEN
  1316.          MOV   CX,0
  1317.          MOV   DX,2479H
  1318.          MOV   BH,7
  1319.          INT   10H
  1320.          MOV   AH,9           ;DISPLAY PROGRAM NAME
  1321.          LEA   DX,PRNAME
  1322.          INT   21H
  1323.          MOV   AH,9           ;DISPLAY COPYRIGHT NOTICE
  1324.          LEA   DX,COPYRITE
  1325.          INT   21H
  1326.          MOV   AH,9           ;DISPLAY PRINTER PROMPT
  1327.          LEA   DX,PRTPRMPT
  1328.          INT   21H
  1329.          MOV   AH,12          ;READ KEYBOARD CHARACTER AND DISPLAY IT
  1330.          MOV   AL,1
  1331.          INT   21H
  1332.          CMP   AL,13          ;CR?
  1333.          JE    DLM            ;YES--JUMP
  1334.          CMP   AL,'1'         ;CHECK FOR LEGAL PRINTER CODE
  1335.          JL    CLSCR
  1336.          CMP   AL,'6'
  1337.          JGE   CLSCR
  1338.          MOV   PRTRCODE,AL    ;STORE PRINTER CODE
  1339. DLM:     MOV   AH,9           ;DISPLAY LEFT MARGIN PROMPT
  1340.          LEA   DX,PRMPLM
  1341.          INT   21H
  1342.          LEA   DX,BUFFER      ;READ FROM KEYBOARD INTO BUFFER
  1343.          MOV   AL,4
  1344.          MOV   BUFFER,AL
  1345.          MOV   AH,10
  1346.          INT   21H
  1347.          CMP   BUFFER+1,0     ;CR ONLY?
  1348.          JE    DRM            ;YES--JUMP
  1349.          LEA   BX,BUFFER+2    ;CONVET IT TO BINARY
  1350.          MOV   CL,BUFFER+1
  1351.          MOV   CH,0
  1352.          CALL  CONVERT
  1353.          JNC   GOOD1          ;IS IT VALID?
  1354.          JMP   DLM
  1355. GOOD1:   MOV   LMARG,AX       ;STORE LEFT MARGIN
  1356. DRM:     MOV   AH,9           ;DISPLAY RIGHT MARGIN PROMPT
  1357.          LEA   DX,PRMPRM
  1358.          INT   21H
  1359.          LEA   DX,BUFFER      ;READ FROM KEYBOARD INTO BUFFER
  1360.          MOV   AL,4
  1361.          MOV   BUFFER,AL
  1362.          MOV   AH,10
  1363.          INT   21H
  1364.          CMP   BUFFER+1,0     ;CR ONLY?
  1365.          JE    DSL            ;YES--JUMP
  1366.          LEA   BX,BUFFER+2    ;CONVET IT TO BINARY
  1367.          MOV   CL,BUFFER+1
  1368.          MOV   CH,0
  1369.          CALL  CONVERT
  1370.          JNC   GOOD2          ;IS IT VALID?
  1371.          JMP   DRM
  1372. GOOD2:   MOV   RMARG,AX       ;STORE RIGHT MARGIN
  1373. DSL:     MOV   AH,9           ;DISPLAY STARTING LINE
  1374.          LEA   DX,PRMPSL
  1375.          INT   21H
  1376.          LEA   DX,BUFFER      ;READ FROM KEYBOARD INTO BUFFER
  1377.          MOV   AL,4
  1378.          MOV   BUFFER,AL
  1379.          MOV   AH,10
  1380.          INT   21H
  1381.          CMP   BUFFER+1,0     ;CR ONLY?
  1382.          JE    DEL            ;YES--JUMP
  1383.          LEA   BX,BUFFER+2    ;CONVET IT TO BINARY
  1384.          MOV   CL,BUFFER+1
  1385.          MOV   CH,0
  1386.          CALL  CONVERT
  1387.          JNC   GOOD3          ;IS IT VALID?
  1388.          JMP   DSL
  1389. GOOD3:   MOV   SLINE,AX       ;STORE STARTING LINE
  1390. DEL:     MOV   AH,9           ;DISPLAY ENDING LINE
  1391.          LEA   DX,PRMPEL
  1392.          INT   21H
  1393.          LEA   DX,BUFFER      ;READ FROM KEYBOARD INTO BUFFER
  1394.          MOV   AL,4
  1395.          MOV   BUFFER,AL
  1396.          MOV   AH,10
  1397.          INT   21H
  1398.          CMP   BUFFER+1,0     ;CR ONLY?
  1399.          JE    DPS            ;YES--JUMP
  1400.          LEA   BX,BUFFER+2    ;CONVET IT TO BINARY
  1401.          MOV   CL,BUFFER+1
  1402.          MOV   CH,0
  1403.          CALL  CONVERT
  1404.          JNC   GOOD4          ;IS IT VALID?
  1405.          JMP   DEL
  1406. GOOD4:   MOV   ELINE,AX       ;STORE ENDING LINE
  1407. DPS:     MOV   AH,9           ;DISPLAY LINES PER PAGE
  1408.          LEA   DX,PRMPPS
  1409.          INT   21H
  1410.          LEA   DX,BUFFER      ;READ FROM KEYBOARD INTO BUFFER
  1411.          MOV   AL,4
  1412.          MOV   BUFFER,AL
  1413.          MOV   AH,10
  1414.          INT   21H
  1415.          CMP   BUFFER+1,0     ;CR ONLY?
  1416.          JE    DFN            ;YES--JUMP
  1417.          LEA   BX,BUFFER+2    ;CONVET IT TO BINARY
  1418.          MOV   CL,BUFFER+1
  1419.          MOV   CH,0
  1420.          CALL  CONVERT
  1421.          JNC   GOOD5          ;IS IT VALID?
  1422.          JMP   DPS
  1423. GOOD5:   MOV   PAGSIZ,AX      ;STORE LINES PER PAGE
  1424. DFN:     MOV   AH,9           ;DISPLAY FILE NAME
  1425.          LEA   DX,PRMPFN
  1426.          INT   21H
  1427.          LEA   DX,BUFFER      ;READ FROM KEYBOARD INTO BUFFER
  1428.          MOV   AL,64
  1429.          MOV   BUFFER,AL
  1430.          MOV   AH,10
  1431.          INT   21H
  1432.          CMP   BUFFER+1,0
  1433.          JNE   NINIT
  1434.          JMP   INITPRT
  1435. NINIT:   CMP   BUFFER+1,1
  1436.          JNE   FNA
  1437.          JMP   ZRODFLT
  1438. FNA:     CMP   BUFFER+1,2
  1439.          JNE   FNB
  1440.          JMP   ZRODFLT
  1441. FNB:     CMP   BUFFER+3,':'
  1442.          JE    FNC
  1443.          JMP   ZRODFLT
  1444. FNC:     MOV   AL,BUFFER+2
  1445.          CMP   AL,96
  1446.          JBE   NOCONV1
  1447.          CMP   AL,122
  1448.          JG    NOCONV1
  1449.          SUB   AL,32
  1450. NOCONV1: CMP   AL,'A'
  1451.          JL    DFN
  1452.          CMP   AL,'H'
  1453.          JGE   DFN
  1454.          MOV   DIRPRE,AL
  1455.          MOV   DIRPRE+1,':'
  1456.          MOV   DIRPRE+2,'\'
  1457.          MOV   DIR2PRE,AL
  1458.          MOV   DIR2PRE+1,':'
  1459.          SUB   AL,40H
  1460.          MOV   FCB,AL
  1461.          MOV   HOLDDRIV,AL
  1462.          MOV   CX,8
  1463.          MOV   SI,0
  1464. LUPBLK1: MOV   AL,32
  1465.          MOV   FILENAME[SI],AL
  1466.          INC   SI
  1467.          LOOP  LUPBLK1
  1468.          MOV   BX,OFFSET BUFFER+4
  1469.          MOV   SI,0
  1470.          MOV   CX,8
  1471. LUPFN1:  MOV   AL,[BX]
  1472.          MOV   HOLDBX,BX
  1473.          CMP   AL,'\'             ;WAS A PATH SPECIFIED
  1474.          JE    PRCP1              ;YES--JUMP
  1475.          JMP   LFN1Y
  1476. PRCP1:   MOV   SI,0
  1477.          MOV   PATHSW,1
  1478.          MOV   AL,[BX]
  1479. LUPP1:   CMP   AL,96
  1480.          JBE   NOCONV2
  1481.          CMP   AL,122
  1482.          JG    NOCONV2
  1483.          SUB   AL,32
  1484. NOCONV2: MOV   DIR2AREA[SI],AL
  1485.          INC   BX
  1486.          INC   SI
  1487.          MOV   AL,[BX]
  1488.          CMP   AL,13
  1489.          JNE   LUPP1
  1490. LUPP2:   DEC   BX
  1491.          DEC   SI
  1492.          MOV   AL,[BX]
  1493.          CMP   AL,'\'
  1494.          JNE   LUPP2
  1495.          CMP   BX,HOLDBX
  1496.          JNE   LUPP3
  1497.          INC   SI
  1498.          MOV   DIR2AREA[SI],0
  1499.          INC   BX
  1500.          MOV   SI,0
  1501.          MOV   CX,8
  1502.          JMP   LFN1Z
  1503. LUPP3:   MOV   DIR2AREA[SI],0
  1504.          INC   BX
  1505.          MOV   SI,0
  1506.          MOV   CX,8
  1507.          JMP   LFN1Z
  1508. LFN1Y:   MOV   AL,[BX]
  1509.          CMP   AL,96
  1510.          JBE   NOCONV3
  1511.          CMP   AL,122
  1512.          JG    NOCONV3
  1513.          SUB   AL,32
  1514. NOCONV3: MOV   FILENAME[SI],AL
  1515.          INC   SI
  1516.          INC   BX
  1517. LFN1Z:   MOV   AL,[BX]
  1518.          CMP   AL,13
  1519.          JE    CKIBMP
  1520.          CMP   AL,'.'
  1521.          JE    PRCEXT
  1522.          JMP   LFN1Y
  1523. PRCEXT:  INC   BX
  1524.          MOV   AL,[BX]
  1525.          CMP   AL,13
  1526.          JNE   CEXT
  1527.          JMP   DFN
  1528. CEXT:    MOV   SI,0
  1529.          MOV   CX,3
  1530. LUPEX1:  MOV   AL,[BX]
  1531.          CMP   AL,96
  1532.          JBE   NOCONV4
  1533.          CMP   AL,122
  1534.          JG    NOCONV4
  1535.          SUB   AL,32
  1536. NOCONV4: MOV   EXTEN[SI],AL
  1537.          INC   SI
  1538.          INC   BX
  1539.          MOV   AL,[BX]
  1540.          CMP   AL,13
  1541.          JE    CKIBMP
  1542.          LOOP  LUPEX1
  1543. CKIBMP:  CMP   PRTRCODE,'1'   ;IBM PRINTER?
  1544.          JE    ISIBM          ;YES--JUMP
  1545.          JMP   INITPRT
  1546. ISIBM:   MOV   SPAC16+1,51
  1547.          MOV   SPAC16+2,36
  1548.          MOV   SPAC19+1,51
  1549.          MOV   SPAC19+2,24
  1550.          MOV   SPAC118+1,51
  1551.          MOV   SPAC118+2,12
  1552. INITPRT: MOV   AX,600H        ;CLEAR SCREEN
  1553.          MOV   CX,0
  1554.          MOV   DX,2479H
  1555.          MOV   BH,7
  1556.          INT   10H
  1557.          MOV   AH,9           ;DISPLAY END MESSAGE
  1558.          LEA   DX,ENDMSG
  1559.          INT   21H
  1560.          MOV   AX,ELINE       ;COMPUTE LINES/PAGE
  1561.          SUB   AX,SLINE
  1562.          INC   AX
  1563.          MOV   PAGESIZE,AX
  1564.          MOV   DX,0              ;SET PAGE SIZE
  1565.          MOV   AH,0
  1566.          MOV   AL,27
  1567.          INT   17H
  1568.          CALL  CHKPRTR
  1569.          CMP   AH,99
  1570.          JNE   CKPRA
  1571.          RET
  1572. CKPRA:   MOV   AH,0
  1573.          MOV   AL,67
  1574.          INT   17H
  1575.          CALL  CHKPRTR
  1576.          CMP   AH,99
  1577.          JNE   SETFORM
  1578.          RET
  1579. SETFORM: MOV   AX,PAGSIZ
  1580.          INT   17H
  1581.          CALL  CHKPRTR
  1582.          CMP   AH,99
  1583.          JNE   CKPR1
  1584.          RET
  1585. CKPR1:   MOV   DX,0           ;SET PRINTER SPACING TO 1/6 INCH
  1586.          MOV   AH,0
  1587.          MOV   AL,SPAC16
  1588.          INT   17H
  1589.          CALL  CHKPRTR
  1590.          CMP   AH,99
  1591.          JNE   ACP1
  1592.          RET
  1593. ACP1:    MOV   AH,0
  1594.          MOV   AL,SPAC16+1
  1595.          INT   17H
  1596.          CALL  CHKPRTR
  1597.          CMP   AH,99
  1598.          JNE   ACP1Z
  1599.          RET
  1600. ACP1Z:   MOV   AH,0
  1601.          MOV   AL,SPAC16+2
  1602.          INT   17H
  1603.          CALL  CHKPRTR
  1604.          CMP   AH,99
  1605.          JNE   ACP2
  1606.          RET
  1607. ACP2:    MOV   AX,SLINE
  1608.          DEC   AX
  1609.          CMP   AX,0
  1610.          JE    CKPATH
  1611.          MOV   CX,AX
  1612. SPACDN1: MOV   AH,0           ;SPACE TO STARTING LOCATION ON PAGE
  1613.          MOV   AL,10
  1614.          INT   17H
  1615.          CALL  CHKPRTR
  1616.          CMP   AH,99
  1617.          JNE   ACP3
  1618.          RET
  1619. ACP3:    LOOP  SPACDN1
  1620. CKPATH:  CMP   PATHSW,1         ;WAS A PATH SPECIFIED?
  1621.          JNE   AFTINIT          ;NO--JUMP
  1622.          MOV   DL,FCB           ;MOVE DRIVE NUMBER
  1623.          LEA   SI,DIRAREA
  1624.          MOV   AH,47H
  1625.          INT   21H
  1626.          MOV   AH,3BH
  1627.          CMP   HOLDDRIV,0     ;WAS A DRIVE SPECIFIED?
  1628.          JNE   DRIVESPC       ;YES--JUMP
  1629.          LEA   DX,DIR2AREA
  1630.          INT   21H
  1631.          JMP   AFTINIT
  1632. DRIVESPC: LEA  DX,DIR2PRE
  1633.          INT   21H
  1634. AFTINIT: LEA   DX,FCB         ;GET LOCATION OF FCB
  1635.          MOV   AH,15          ;OPEN FILE
  1636.          INT   21H
  1637.          MOV   HOLDAL,AL      ;STORE RETURN CODE
  1638.          CMP   PATHSW,1       ;WAS A PATH SPECIFIED?
  1639.          JNE   CMPHAL         ;NO--JUMP
  1640.          MOV   AH,3BH
  1641.          CMP   HOLDDRIV,0     ;WAS A DRIVE SPECIFIED:
  1642.          JNE   DRIVSP2        ;YES--JUMP
  1643.          MOV   AL,DEFAULT     ;MOVE DEFAULT DRIVE
  1644.          MOV   DIRPRE,AL
  1645.          MOV   DIRPRE+1,':'
  1646.          MOV   DIRPRE+2,'\'
  1647.          LEA   DX,DIRPRE
  1648.          INT   21H
  1649.          JMP   CMPHAL
  1650. DRIVSP2: LEA   DX,DIRPRE
  1651.          INT   21H
  1652. CMPHAL:  CMP   HOLDAL,0
  1653.          JE    SETRS
  1654.          MOV   AH,9
  1655.          LEA   DX,OPNERR
  1656.          INT   21H
  1657.          RET
  1658. SETRS:   MOV   RECSIZ,512     ;SET RECORD SIZE
  1659.          LEA   DX,AREA        ;GET LOCATION OF BUFFER
  1660.          MOV   AH,26          ;SET DISK TRANSFER ADDRESS
  1661.          INT   21H
  1662.          MOV   CX,1           ;CHARACTER COUNT=1
  1663.          MOV   BX,OFFSET LINE1
  1664. READIT:  MOV   HOLDDX,DX      ;SAVE DX
  1665.          MOV   ENDSW,0
  1666.          LEA   DX,FCB         ;GET LOCATION OF FCB
  1667.          MOV   AH,20          ;READ FILE
  1668.          INT   21H
  1669.          CMP   AL,1           ;END OF FILE?
  1670.          JNE   NE1            ;NO--JUMP
  1671.          JMP   ENDF1
  1672. NE1:     MOV   DX,HOLDDX      ;RESTORE DX
  1673.          MOV   HSI5,-1        ;SUBSCRIPT
  1674. INCSUB:  INC   HSI5           ;INCREMENT SUBSCRIPT
  1675.          MOV   SI,HSI5
  1676.          CMP   SI,512         ;END OF RECORD?
  1677.          JE    READIT
  1678.          MOV   AL,AREA[SI]    ;MOVE BYTE
  1679.          CMP   AL,10          ;NEWLINE?
  1680.          JNE   CMPHOF1        ;NO--JUMP
  1681.          JMP   MOVBX2
  1682. ZRODFLT: MOV   CX,8
  1683.          MOV   SI,0
  1684. LUPBLK2: MOV   AL,32
  1685.          MOV   FILENAME[SI],AL
  1686.          INC   SI
  1687.          LOOP  LUPBLK2
  1688.          MOV   AL,0
  1689.          MOV   FCB,AL
  1690.          MOV   BX,OFFSET BUFFER+2
  1691.          MOV   SI,0
  1692.          MOV   CX,8
  1693.          JMP   LUPFN1
  1694. CMPHOF1: CMP   AL,12          ;SKIP TO HEAD OF FORM?
  1695.          JE    SKP1           ;YES--JUMP
  1696.          CMP   AL,13          ;ELIMINATE VOLKSWRITER SPECIAL CHARACTERS
  1697.          JE    INCSUB
  1698.          CMP   AL,26
  1699.          JNE   NE2
  1700.          JMP   ENDF1
  1701. NE2:     CMP   AL,20
  1702.          JE    INCSUB
  1703.          CMP   AL,21
  1704.          JE    INCSUB
  1705.          CMP   AL,24
  1706.          JE    INCSUB
  1707.          CMP   AL,25
  1708.          JE    INCSUB
  1709.          MOV   ENDSW,1
  1710.          CMP   AL,155         ;CENT SIGN?
  1711.          JNE   NE2XX          ;NO--JUMP
  1712.          MOV   AL,212         ;CONVERT TO PRINTER CENT SIGN
  1713. NE2XX:   MOV   ES:[BX],AL
  1714.          INC   BX             ;INCREMENT POINTER
  1715.          JMP   INCSUB
  1716. SKP1:    MOV   AH,0           ;TELL PRINTER TO SKIP TO HOF
  1717.          MOV   AL,12
  1718.          MOV   DX,0
  1719.          INT   17H
  1720.          CALL  CHKPRTR
  1721.          CMP   AH,99
  1722.          JNE   CHKDP1
  1723.          RET
  1724. CHKDP1:  MOV   DX,0           ;SET PRINTER SPACING TO 1/6 INCH
  1725.          MOV   AH,0
  1726.          MOV   AL,SPAC16
  1727.          INT   17H
  1728.          CALL  CHKPRTR
  1729.          CMP   AH,99
  1730.          JNE   ACP4
  1731.          RET
  1732. ACP4:    MOV   AH,0
  1733.          MOV   AL,SPAC16+1
  1734.          INT   17H
  1735.          CALL  CHKPRTR
  1736.          CMP   AH,99
  1737.          JNE   ACP5
  1738.          RET
  1739. ACP5:    MOV   AH,0
  1740.          MOV   AL,SPAC16+2
  1741.          INT   17H
  1742.          CALL  CHKPRTR
  1743.          CMP   AH,99
  1744.          JNE   ACP5X
  1745.          RET
  1746. ACP5X:   MOV   AX,SLINE
  1747.          DEC   AX
  1748.          CMP   AX,0
  1749.          JE    ZZZLN
  1750.          MOV   CX,AX
  1751. SPACDN2: MOV   AH,0           ;SPACE TO STARTING LOCATION ON PAGE
  1752.          MOV   AL,10
  1753.          INT   17H
  1754.          CALL  CHKPRTR
  1755.          CMP   AH,99
  1756.          JNE   ACP3X
  1757.          RET
  1758. ACP3X:   LOOP  SPACDN2
  1759. ZZZLN:   MOV   LINCNT,0        ;ZERO LINE COUNT
  1760.          MOV   BX,OFFSET LINE1  ;MOVE SPACES TO LINE1
  1761. FSL1:    MOV   AL,255
  1762.          CMP   ES:[BX],AL     ;END OF LINE?
  1763.          JE    SOFFL1         ;YES--JUMP
  1764.          MOV   AL,32          ;MOVE A SPACE
  1765.          MOV   ES:[BX],AL
  1766.          INC   BX
  1767.          JMP   FSL1
  1768. SOFFL1:  MOV   BX,OFFSET LINE1
  1769. NLLUP:   INC   HSI5
  1770.          MOV   SI,HSI5
  1771.          CMP   SI,512         ;END OF RECORD
  1772.          JNE   CKNL1          ;NO--JUMP
  1773.          MOV   HOLDDX,DX      ;SAVE DX
  1774.          MOV   ENDSW,0
  1775.          LEA   DX,FCB         ;GET LOCATION OF FCB
  1776.          MOV   AH,20          ;READ FILE
  1777.          INT   21H
  1778.          CMP   AL,1           ;END OF FILE?
  1779.          JNE   MOVZSI         ;NO--JUMP
  1780.          JMP   ENDF1
  1781. MOVZSI:  MOV   DX,HOLDDX
  1782.          MOV   SI,0
  1783. CKNL1:   MOV   AL,AREA[SI]    ;SEARCH FOR NEWLINE
  1784.          CMP   AL,10
  1785.          JNE   NLLUP
  1786.          JMP   INCSUB
  1787. MOVBX2:  MOV   AH,6           ;READ KEYBOARD CHARACTER
  1788.          MOV   DL,0FFH
  1789.          INT   21H
  1790.          CMP   AL,'E'         ;END IT?
  1791.          JNE   COMPSE
  1792.          JMP   EOJ
  1793. COMPSE:  CMP   AL,'e'
  1794.          JNE   MOVBX8         ;NO--JUMP
  1795.          JMP   EOJ
  1796. MOVBX8:  MOV   AH,0BH
  1797.          INT   21H
  1798.          MOV   BX,OFFSET LINE2
  1799.          JMP   INCSUB2
  1800. READIT2: MOV   HOLDDX,DX      ;SAVE DX
  1801.          MOV   ENDSW,999
  1802.          LEA   DX,FCB         ;GET LOCATION OF FCB
  1803.          MOV   AH,20          ;READ FILE
  1804.          INT   21H
  1805.          CMP   AL,1           ;END OF FILE?
  1806.          JNE   NE2B           ;NO--JUMP
  1807.          JMP   ENDF1
  1808. NE2B:    MOV   DX,HOLDDX      ;RESTORE DX
  1809. NEWLN1:  MOV   HSI5,-1        ;SUBSCRIPT
  1810. INCSUB2: INC   HSI5           ;INCREMENT SUBSCRIPT
  1811.          MOV   SI,HSI5
  1812.          CMP   SI,512         ;END OF RECORD?
  1813.          JE    READIT2
  1814.          MOV   AL,AREA[SI]    ;MOVE BYTE
  1815.          CMP   AL,10          ;NEWLINE?
  1816.          JNE   CKSHOF2        ;NO--JUMP
  1817.          JMP   NEWLN3
  1818. CKSHOF2: CMP   AL,12          ;SKIP TO HEAD OF FORM
  1819.          JE    SKP2           ;YES--JUMP
  1820.          CMP   AL,13          ;ELIMINATE VOLKSWRITER SPECIAL CHARACTERS
  1821.          JE    INCSUB2
  1822.          CMP   AL,26
  1823.          JNE   NE3
  1824.          JMP   ENDF1
  1825. NE3:     CMP   AL,20
  1826.          JE    INCSUB2
  1827.          CMP   AL,21
  1828.          JE    INCSUB2
  1829.          CMP   AL,24
  1830.          JE    INCSUB2
  1831.          CMP   AL,25
  1832.          JE    INCSUB2
  1833.          CMP   AL,155         ;CENT SIGN?
  1834.          JNE   NE3XX          ;NO--JUMP
  1835.          MOV   AL,212         ;CONVERT TO PRINTER CENT SIGN
  1836. NE3XX:   MOV   [BX],AL
  1837.          MOV   ENDSW,2
  1838.          INC   BX             ;INCREMENT POINTER
  1839.          JMP   INCSUB2
  1840. MVZ1:    MOV   IBITS,0
  1841.          MOV   IREM,0
  1842.          JMP   MOVSI1
  1843. SKP2:    MOV   AX,PAGESIZE
  1844.          SUB   AX,2
  1845.          MOV   LINCNT,AX
  1846.          JMP   INCSUB2
  1847. FSL2:    MOV   AL,255
  1848.          CMP   [BX],AL          ;END OF LINE?
  1849.          JE    SOFFL2           ;YES--JUMP
  1850.          MOV   AL,32            ;MOVE A SPACE
  1851.          MOV   [BX],AL
  1852.          INC   BX
  1853.          JMP   FSL2
  1854. SOFFL2:  MOV   BX,OFFSET LINE2
  1855. NLLUP2:  INC   HSI5
  1856.          MOV   SI,HSI5
  1857.          CMP   SI,512            ;END OF RECORD?
  1858.          JNE   CKNL2             ;NO--JUMP
  1859.          MOV   HOLDDX,DX         ;SAVE DX
  1860.          MOV   ENDSW,999
  1861.          LEA   DX,FCB            ;GET LOCATION OF FCB
  1862.          MOV   AH,20             ;READ FILE
  1863.          INT   21H
  1864.          CMP   AL,1              ;END OF FILE?
  1865.          JNE   MOVZSI2           ;NO--JUMP
  1866.          JMP   ENDF1
  1867. MOVZSI2: MOV   DX,HOLDDX
  1868.          MOV   SI,0
  1869. CKNL2:   MOV   AL,AREA[SI]       ;SEARCH FOR NEWLINE
  1870.          CMP   AL,10
  1871.          JNE   NLLUP2
  1872.          JMP   INCSUB2
  1873. NEWLN3:  MOV   AL,255
  1874.          CMP   [BX],AL
  1875.          JE    MOVOFF
  1876.          MOV   AL,32
  1877.          MOV   [BX],AL
  1878.          INC   BX
  1879.          JMP   NEWLN3
  1880. MOVOFF:  MOV   AX,LINCNT
  1881.          CMP   AX,PAGESIZE
  1882.          JNE   MVO
  1883.          MOV   DX,0           ;SET PRINTER SPACING TO 1/6 INCH
  1884.          MOV   AH,0
  1885.          MOV   AL,SPAC16
  1886.          INT   17H
  1887.          CALL  CHKPRTR
  1888.          CMP   AH,99
  1889.          JNE   ACP7K
  1890.          RET
  1891. ACP7K:   MOV   AH,0
  1892.          MOV   AL,SPAC16+1
  1893.          INT   17H
  1894.          CALL  CHKPRTR
  1895.          CMP   AH,99
  1896.          JNE   ACP7L
  1897.          RET
  1898. ACP7L:   MOV   AH,0
  1899.          MOV   AL,SPAC16+2
  1900.          INT   17H
  1901.          CALL  CHKPRTR
  1902.          CMP   AH,99
  1903.          JNE   ACP7M
  1904.          RET
  1905. ACP7M:   MOV   AH,0
  1906.          MOV   AL,12
  1907.          MOV   DX,0
  1908.          INT   17H
  1909.          CALL  CHKPRTR
  1910.          CMP   AH,99
  1911.          JNE   CKPR3
  1912.          RET
  1913. CKPR3:   MOV   LINCNT,0
  1914.          MOV   AX,SLINE
  1915.          DEC   AX
  1916.          CMP   AX,0
  1917.          JE    MVO
  1918.          MOV   CX,AX
  1919. SPACDN4: MOV   AH,0                ;SPACE TO STARTING LOCATION ON PAGE
  1920.          MOV   AL,10
  1921.          INT   17H
  1922.          CALL  CHKPRTR
  1923.          CMP   AH,99
  1924.          JNE   ACPJJ
  1925.          RET
  1926. ACPJJ:   LOOP  SPACDN4
  1927. MVO:     MOV   BX,OFFSET LINE1
  1928.          ADC   BX,RMARG
  1929.          DEC   BX
  1930.          MOV   AX,RMARG
  1931.          DEC   AX
  1932.          MOV   COL,AL
  1933.          MOV   AL,COL
  1934.          SUB   AL,12
  1935.          MOV   COL59,AL
  1936.          MOV   SI,LMARG
  1937.          DEC   SI
  1938.          CMP   LINE1[SI],'.'            ;CHANGE MARGIN?
  1939.          JE    NM1                      ;YES--JUMP
  1940.          JMP   MOVIND
  1941. NM1:     CMP   LINE1+1[SI],'.'
  1942.          JE    NM2
  1943.          JMP   MOVIND
  1944. NM2:     CMP   LINE1+3[SI],'M'
  1945.          JNE   CKSMALM
  1946. CKLARGA: CMP   LINE1+4[SI],'A'
  1947.          JNE   CKSMALA
  1948. CKLARGR: CMP   LINE1+5[SI],'R'
  1949.          JNE   CKSMALR
  1950. CKLARGG: CMP   LINE1+6[SI],'G'
  1951.          JNE   CKSMALG
  1952. CKLARGL: CMP   LINE1+2[SI],'L'
  1953.          JNE   CKSMALL
  1954.          JMP   SETLEFT
  1955. CKSMALM: CMP   LINE1+3[SI],'m'
  1956.          JE    CKLARGA
  1957.          JMP   MOVIND
  1958. CKSMALA: CMP   LINE1+4[SI],'a'
  1959.          JE    CKLARGR
  1960.          JMP   MOVIND
  1961. CKSMALR: CMP   LINE1+5[SI],'r'
  1962.          JE    CKLARGG
  1963.          JMP   MOVIND
  1964. CKSMALG: CMP   LINE1+6[SI],'g'
  1965.          JE    CKLARGL
  1966.          JMP   MOVIND
  1967. CKSMALL: CMP   LINE1+2[SI],'l'
  1968.          JNE   CKRIGHT
  1969.          JMP   SETLEFT
  1970. CKRIGHT: CMP   LINE1+2[SI],'R'
  1971.          JNE   CKRGT2
  1972.          JMP   SETRIGHT
  1973. CKRGT2:  CMP   LINE1+2[SI],'r'
  1974.          JE    JSR
  1975.          JMP   MOVIND
  1976. JSR:     JMP   SETRIGHT
  1977. SETLEFT: MOV   CX,0
  1978.          CMP   LINE1+7[SI],' '
  1979.          JNE   NM2B
  1980.          JMP   MOVIND
  1981. NM2B:    CMP   LINE1+7[SI],10
  1982.          JNE   NM3
  1983.          JMP   MOVIND
  1984. NM3:     CMP   LINE1+7[SI],13
  1985.          JNE   NM4
  1986.          JMP   MOVIND
  1987. NM4:     MOV   CX,1
  1988.          CMP   LINE1+8[SI],' '
  1989.          JE    PLEFT
  1990.          CMP   LINE1+8[SI],10
  1991.          JE    PLEFT
  1992.          CMP   LINE1+8[SI],13
  1993.          JE    PLEFT
  1994.          MOV   CX,2
  1995.          CMP   LINE1+9[SI],' '
  1996.          JE    PLEFT
  1997.          CMP   LINE1+9[SI],10
  1998.          JE    PLEFT
  1999.          CMP   LINE1+9[SI],13
  2000.          JE    PLEFT
  2001.          MOV   CX,3
  2002. PLEFT:   LEA   BX,HMAR
  2003.          MOV   AL,LINE1+7[SI]
  2004.          MOV   HMAR,AL
  2005.          MOV   AL,LINE1+8[SI]
  2006.          MOV   HMAR+1,AL
  2007.          MOV   AL,LINE1+9[SI]
  2008.          MOV   HMAR+2,AL
  2009.          CALL  CONVERT
  2010.          JNC   CNVLM
  2011.          JMP   MOVIND
  2012. CNVLM:   MOV   LMARG,AX
  2013.          JMP   CKPR15
  2014. SETRIGHT: MOV   CX,0
  2015.          CMP   LINE1+7[SI],' '
  2016.          JNE   NM5
  2017.          JMP   MOVIND
  2018. NM5:     CMP   LINE1+7[SI],10
  2019.          JNE   NM6
  2020.          JMP   MOVIND
  2021. NM6:     CMP   LINE1+7[SI],13
  2022.          JNE   NM7
  2023.          JMP   MOVIND
  2024. NM7:     MOV   CX,1
  2025.          CMP   LINE1+8[SI],' '
  2026.          JE    PRIGHT
  2027.          CMP   LINE1+8[SI],10
  2028.          JE    PRIGHT
  2029.          CMP   LINE1+8[SI],13
  2030.          JE    PRIGHT
  2031.          MOV   CX,2
  2032.          CMP   LINE1+9[SI],' '
  2033.          JE    PRIGHT
  2034.          CMP   LINE1+9[SI],10
  2035.          JE    PRIGHT
  2036.          CMP   LINE1+9[SI],13
  2037.          JE    PRIGHT
  2038.          MOV   CX,3
  2039. PRIGHT:  LEA   BX,HMAR
  2040.          MOV   AL,LINE1+7[SI]
  2041.          MOV   HMAR,AL
  2042.          MOV   AL,LINE1+8[SI]
  2043.          MOV   HMAR+1,AL
  2044.          MOV   AL,LINE1+9[SI]
  2045.          MOV   HMAR+2,AL
  2046.          CALL  CONVERT
  2047.          JNC   CNVRM
  2048.          JMP   MOVIND
  2049. CNVRM:   MOV   RMARG,AX
  2050.          JMP   CKPR15
  2051. MOVIND:  MOV   BX,OFFSET LINE1
  2052.          CLC
  2053.          ADC   LINCNT,1
  2054.          CLC
  2055.          ADC   BX,RMARG                  ;LOCATE LAST NON-BLANK CHARACTER
  2056.          DEC   BX
  2057.          MOV   AX,RMARG
  2058.          DEC   AX
  2059.          MOV   COL,AL
  2060.          MOV   AL,COL
  2061.          SUB   AL,18
  2062.          MOV   COL59,AL
  2063.          MOV   SI,LMARG
  2064.          DEC   SI
  2065.          MOV   INDENT,0
  2066.          CMP   LINE1[SI],' '
  2067.          JNE   CKBLK1
  2068.          MOV   INDENT,1
  2069.          CMP   LINE1+1[SI],' '
  2070.          JNE   CKBLK1
  2071.          MOV   INDENT,2
  2072.          CMP   LINE1+2[SI],' '
  2073.          JNE   CKBLK1
  2074.          MOV   INDENT,3
  2075.          CMP   LINE1+3[SI],' '
  2076.          JNE   CKBLK1
  2077.          MOV   INDENT,4
  2078.          CMP   LINE1+4[SI],' '
  2079.          JNE   CKBLK1
  2080.          MOV   INDENT,5
  2081.          CMP   LINE1+5[SI],' '
  2082.          JNE   CKBLK1
  2083.          MOV   INDENT,6
  2084.          CMP   LINE1+6[SI],' '
  2085.          JNE   CKBLK1
  2086.          JMP   NOJUS1
  2087. CKBLK1:  MOV   AL,ES:[BX]              ;BLANK?
  2088.          CMP   AL,32
  2089.          JNE   FB1                     ;NO--JUMP
  2090.          DEC   COL                     ;DECREMENT COLUMN
  2091.          MOV   AL,COL59
  2092.          CMP   COL,AL                  ;COLUMN 59?
  2093.          JE    NOJUS1                  ;YES--JUMP
  2094.          DEC   BX                      ;DECREMENT POINTER
  2095.          JMP   CKBLK1
  2096. NOJUS1:  MOV   IBITS,0
  2097.          MOV   IREM,0
  2098.          JMP   MOVSI1
  2099. FB1:     MOV   AX,RMARG                 ;COMPUTE BITS TO INSERT
  2100.          SUB   AL,COL
  2101.          DEC   AL
  2102.          CMP   AL,0
  2103.          JNE   FB1Z
  2104.          JMP   MVZ1
  2105. FB1Z:    MUL   C12
  2106.          MOV   HWORD,AX
  2107.          MOV   AL,COL
  2108.          SUB   AX,LMARG
  2109.          SUB   AX,INDENT
  2110.          MOV   HCOL,AL
  2111.          INC   HCOL
  2112.          MOV   AX,HWORD
  2113.          DIV   HCOL
  2114.          MOV   HBYTE1,AL
  2115.          MOV   HBYTE2,AH
  2116.          CBW
  2117.          MOV   IBITS,AX
  2118.          MOV   AL,HBYTE2
  2119.          CBW
  2120.          MOV   IREM,AX
  2121. MOVSI1:  MOV   AX,LMARG
  2122.          ADD   AX,INDENT
  2123.          DEC   AX
  2124.          MOV   HSI9,AX
  2125.          MOV   L1SUB,0
  2126.          MOV   LCOL,0
  2127.          MOV   AX,LMARG            ;SKIP TO STARTING COLUMN
  2128.          ADD   AX,INDENT
  2129.          DEC   AX
  2130.          CMP   AX,0
  2131.          JE    LUP1
  2132.          MUL   C12
  2133.          MOV   CX,AX
  2134.          MOV   AL,0
  2135. MOVZR1:  MOV   SI,L1SUB
  2136.          MOV   L1[SI],AL
  2137.          MOV   L2[SI],AL
  2138.          INC   L1SUB
  2139.          LOOP  MOVZR1
  2140. LUP1:    MOV   SI,HSI9
  2141.          MOV   AL,LINE1[SI]
  2142.          MUL   C24
  2143.          MOV   HSI2,AX
  2144.          MOV   CX,12
  2145. LUP2:    MOV   SI,HSI2
  2146.          MOV   AX,TRTAB[SI]
  2147.          MOV   SI,L1SUB
  2148.          SAR   AX,1
  2149.          MOV   L1[SI],AL
  2150.          MOV   SI,HSI2
  2151.          MOV   AX,TRTAB[SI]
  2152.          AND   AL,1B
  2153.          SAL   AL,1
  2154.          SAL   AL,1
  2155.          SAL   AL,1
  2156.          SAL   AL,1
  2157.          SAL   AL,1
  2158.          SAL   AL,1
  2159.          SAL   AL,1
  2160.          MOV   SI,L1SUB
  2161.          MOV   L2[SI],AL
  2162.          INC   L1SUB
  2163.          INC   HSI2
  2164.          INC   HSI2
  2165.          LOOPNZ LUP2
  2166.          CMP   IBITS,0
  2167.          JE    CKRM1
  2168.          MOV   CX,IBITS
  2169. LUP3:    MOV   SI,L1SUB
  2170.          MOV   L1[SI],0
  2171.          MOV   L2[SI],0
  2172.          INC   L1SUB
  2173.          LOOPNZ LUP3
  2174. CKRM1:   CMP   IREM,0
  2175.          JE    CKE1
  2176.          DEC   IREM
  2177.          MOV   SI,L1SUB
  2178.          MOV   L1[SI],0
  2179.          MOV   L2[SI],0
  2180.          INC   L1SUB
  2181. CKE1:    CMP   L1SUB,960
  2182.          JGE   NEWLN4
  2183.          INC   HSI9
  2184.          JMP   LUP1
  2185. NEWLN4:  MOV   AL,255
  2186.          INC   BX
  2187.          CMP   ES:[BX],AL
  2188.          JE    LUP8B
  2189.          MOV   AL,32
  2190.          MOV   ES:[BX],AL
  2191.          JMP   NEWLN4
  2192. LUP8B:   MOV   HSI4,-1        ;SUBSCRIPT
  2193.          MOV   DX,0           ;PRINTER NUMBER
  2194.          MOV   AH,0           ;SET PRINTER SPACING TO 1/9 INCH
  2195.          MOV   AL,SPAC19
  2196.          INT   17H
  2197.          CALL  CHKPRTR
  2198.          CMP   AH,99
  2199.          JNE   CKPR4
  2200.          RET
  2201. CKPR4:   MOV   AH,0
  2202.          MOV   AL,SPAC19+1
  2203.          INT   17H
  2204.          CALL  CHKPRTR
  2205.          CMP   AH,99
  2206.          JNE   CKPRZ1
  2207.          RET
  2208. CKPRZ1:  MOV   AH,0
  2209.          MOV   AL,SPAC19+2
  2210.          INT   17H
  2211.          CALL  CHKPRTR
  2212.          CMP   AH,99
  2213.          JNE   CKPRZZ
  2214.          RET
  2215. CKPRZZ:  MOV   AH,0
  2216.          MOV   AL,27          ;SET PRINTER TO DUAL DENSITY GRAPHICS
  2217.          MOV   DX,0
  2218.          INT   17H
  2219.          CALL  CHKPRTR
  2220.          CMP   AH,99
  2221.          JNE   CKPRZ2
  2222.          RET
  2223. CKPRZ2:  MOV   AH,0
  2224.          MOV   AL,76
  2225.          MOV   DX,0
  2226.          INT   17H
  2227.          CALL  CHKPRTR
  2228.          CMP   AH,99
  2229.          JNE   CKPR5
  2230.          RET
  2231. CKPR5:   MOV   AH,0
  2232.          MOV   AL,192
  2233.          MOV   DX,0
  2234.          INT   17H
  2235.          MOV   AH,0
  2236.          MOV   AL,3
  2237.          MOV   DX,0
  2238.          INT   17H
  2239.          CALL  CHKPRTR
  2240.          CMP   AH,99
  2241.          JNE   LOOPCHR
  2242.          RET
  2243. LOOPCHR: MOV   DX,0           ;PRINTER NUMBER
  2244.          INC   HSI4           ;BUMP SUBSCRIPT
  2245.          MOV   SI,HSI4
  2246.          MOV   AL,L1[SI]
  2247.          MOV   AH,0
  2248.          INT   17H
  2249.          CALL  CHKPRTR
  2250.          CMP   AH,99
  2251.          JNE   CKPR6
  2252.          RET
  2253. CKPR6:   INC   SI
  2254.          CMP   SI,960         ;END OF TABLE?
  2255.          JNE   LOOPCHR        ;NO--BRANCH
  2256.          MOV   AH,0           ;CARRIAGE RETURN
  2257.          MOV   AL,13
  2258.          MOV   DX,0
  2259.          INT   17H
  2260.          CALL  CHKPRTR
  2261.          CMP   AH,99
  2262.          JNE   CKPR7
  2263.          RET
  2264. CKPR7:   MOV   AH,0           ;LINE FEED
  2265.          MOV   AL,10
  2266.          MOV   DX,0
  2267.          INT   17H
  2268.          CALL  CHKPRTR
  2269.          CMP   AH,99
  2270.          JNE   NOTE9
  2271.          RET
  2272. NOTE9:   MOV   HSI4,-1          ;SUBSCRIPT
  2273.          MOV   DX,0           ;PRINTER NUMBER
  2274.          MOV   AH,0           ;SET PRINTER SPACING TO 1/18 INCH
  2275.          MOV   AL,SPAC118
  2276.          INT   17H
  2277.          CALL  CHKPRTR
  2278.          CMP   AH,99
  2279.          JNE   CKPR8
  2280.          RET
  2281. CKPR8:   MOV   AH,0
  2282.          MOV   AL,SPAC118+1
  2283.          INT   17H
  2284.          CALL  CHKPRTR
  2285.          CMP   AH,99
  2286.          JNE   CKPR9
  2287.          RET
  2288. CKPR9:   MOV   AH,0
  2289.          MOV   AL,SPAC118+2
  2290.          INT   17H
  2291.          CALL  CHKPRTR
  2292.          CMP   AH,99
  2293.          JNE   CKPR10
  2294.          RET
  2295. CKPR10:  MOV   AH,0
  2296.          MOV   AL,27          ;SET PRINTER TO DUAL DENSITY GRAPHICS
  2297.          MOV   DX,0
  2298.          INT   17H
  2299.          CALL  CHKPRTR
  2300.          CMP   AH,99
  2301.          JNE   CKPR11
  2302.          RET
  2303. CKPR11:  MOV   AH,0
  2304.          MOV   AL,76
  2305.          MOV   DX,0
  2306.          INT   17H
  2307.          CALL  CHKPRTR
  2308.          CMP   AH,99
  2309.          JNE   CKPR12
  2310.          RET
  2311. CKPR12:  MOV   AH,0
  2312.          MOV   AL,192
  2313.          MOV   DX,0
  2314.          INT   17H
  2315.          CALL  CHKPRTR
  2316.          CMP   AH,99
  2317.          JNE   CKPR12Z
  2318.          RET
  2319. CKPR12Z: MOV   AH,0
  2320.          MOV   AL,3
  2321.          INT   17H
  2322.          CALL  CHKPRTR
  2323.          CMP   AH,99
  2324.          JNE   LOOPCH2
  2325.          RET
  2326. LOOPCH2: MOV   DX,0           ;PRINTER NUMBER
  2327.          INC   HSI4           ;BUMP SUBSCRIPT
  2328.          MOV   SI,HSI4
  2329.          MOV   AL,L2[SI]
  2330.          MOV   AH,0
  2331.          INT   17H
  2332.          CALL  CHKPRTR
  2333.          CMP   AH,99
  2334.          JNE   CKPR13
  2335.          RET
  2336. CKPR13:  INC   SI
  2337.          CMP   SI,960         ;END OF TABLE?
  2338.          JNE   LOOPCH2        ;NO--BRANCH
  2339.          MOV   AH,0           ;CARRIAGE RETURN
  2340.          MOV   AL,13
  2341.          MOV   DX,0
  2342.          INT   17H
  2343.          CALL  CHKPRTR
  2344.          CMP   AH,99
  2345.          JNE   CKPR14
  2346.          RET
  2347. CKPR14:  MOV   AH,0           ;LINE FEED
  2348.          MOV   AL,10
  2349.          MOV   DX,0
  2350.          INT   17H
  2351.          CALL  CHKPRTR
  2352.          CMP   AH,99
  2353.          JNE   CKPR15
  2354.          RET
  2355. CKPR15:  MOV   SI,OFFSET LINE2
  2356.          MOV   DI,OFFSET LINE1
  2357.          MOV   CX,LENGTH LINE2
  2358.  REP     MOVS  LINE1,LINE2
  2359.          CMP   ENDSW,888
  2360.          JE    EOJ
  2361.          JMP   MOVBX2
  2362. ENDF1:   CMP   ENDSW,0
  2363.          JE    EOJ
  2364.          MOV   ENDSW,888
  2365.          JMP   NOJUS1
  2366. EOJ:     MOV   AH,0           ;TELL PRINTER TO SKIP TO HOF
  2367.          MOV   AL,12
  2368.          MOV   DX,0
  2369.          INT   17H
  2370.          CALL  CHKPRTR
  2371.          CMP   AH,99
  2372.          JNE   EOJZZ
  2373.          RET
  2374. EOJZZ:   MOV   DX,0           ;SET PRINTER SPACING TO 1/6 INCH
  2375.          MOV   AH,0
  2376.          MOV   AL,SPAC16
  2377.          INT   17H
  2378.          CALL  CHKPRTR
  2379.          CMP   AH,99
  2380.          JNE   EOJZ1
  2381.          RET
  2382. EOJZ1:   MOV   AH,0
  2383.          MOV   AL,SPAC16+1
  2384.          INT   17H
  2385.          CALL  CHKPRTR
  2386.          CMP   AH,99
  2387.          JNE   EOJZ2
  2388.          RET
  2389. EOJZ2:   MOV   AH,0
  2390.          MOV   AL,SPAC16+2
  2391.          INT   17H
  2392.          CALL  CHKPRTR
  2393.          RET
  2394. JUS_PROC ENDP
  2395. CONVERT  PROC  NEAR
  2396.          PUSH  BX                           ;SAVE BX AND CX
  2397.          PUSH  CX
  2398.          SUB   AX,AX                        ;TO START, RESULT=0,
  2399.          SUB   DX,DX                        ; DECIMAL COUNT=0,
  2400.          MOV   DI,0FFH                      ; ASSUME NO BAD CHARACTERS
  2401.          CMP   CX,7                         ;STRING TOO LONG?
  2402.          JA    NO_GOOD               ;IF SO, GO SET CF AND EXIT
  2403. BLANKS:  CMP   BYTE PTR [BX],' '     ;SCAN PAST LEADING BLANKS
  2404.          JNE   CHK_NEG
  2405.          INC   BX
  2406.          LOOP  BLANKS
  2407. CHK_NEG: CMP   BYTE PTR [BX],'-'     ;NEGATIVE NUMBER?
  2408.          JNE   CHK_POS
  2409.          INC   BX                    ;IF SO, INCREMENT POINTER,
  2410.          DEC   CX                    ; DECREMENT THE COUNT,
  2411.          CALL  CONV_AB               ; AND CONVERT THE STRING
  2412.          JC    THRU
  2413.          CMP   AX,32768              ;IS THE NUMBER TOO SMALL?
  2414.          JA    NO_GOOD
  2415.          NEG   AX                    ;NO, COMPLEMENT THE RESULT
  2416.          JS    GOOD
  2417. CHK_POS: CMP   BYTE PTR [BX],'+'     ;POSITIVE NUMBER?
  2418.          JNE   GO_CONV
  2419.          INC   BX                    ;IF SO, INCREMENT POINTER,
  2420.          DEC   CX                    ; DECREMENT THE COUNT,
  2421. GO_CONV: CALL  CONV_AB               ; AND CONVERT THE STRING
  2422.          JC    THRU
  2423.          CMP   AX,32767              ;IS THE NUMBER TOO BIG?
  2424.          JA    NO_GOOD
  2425. GOOD:    CLC
  2426.          JNC   THRU
  2427. NO_GOOD: STC                         ;IF SO, SET CARRY FLAG
  2428. THRU:    POP   CX                    ;RESTORE REGISTERS
  2429.          POP   BX
  2430.          RET                         ; AND EXIT
  2431. CONV_AB: PUSH  BP                    ;SAVE SCRATCH REGISTERS
  2432.          PUSH  BX
  2433.          PUSH  SI
  2434.          MOV   BP,BX
  2435. CHK_PT:  CMP   DX,0                  ;DECIMAL POINT ALREADY FOUND?
  2436.          JNZ   RANGE                 ; IF SO, SKIP FOLLOWING CHECK
  2437.          CMP   BYTE PTR DS:[BP],'.'  ;DECIMAL POINT?
  2438.          JNE   RANGE
  2439.          DEC   CX                    ;IF SO,DECREMENT COUNT,
  2440.          MOV   DX,CX                 ; AND RECORD IT IN DX
  2441.          JZ    END_CONV              ; EXIT IF CX=0
  2442.          INC   BP                    ; INCREMENT POINTER
  2443. RANGE:   CMP   BYTE PTR DS:[BP],'0'  ;IF THE CHARACTER IS NOT A DIGIT
  2444.          JB    NON_DIG
  2445.          CMP   BYTE PTR DS:[BP],'9'
  2446.          JBE   DIGIT
  2447. NON_DIG: MOV   DI,BP                 ;PUT ITS ADDRESS IN DI,
  2448.          STC                         ; SET THE CARRY FLAG,
  2449.          JC    END_CONV              ; AND EXIT
  2450. DIGIT:   MOV   SI,10                 ;THE CHARACTER IS A DIGIT,
  2451.          PUSH  DX
  2452.          MUL   SI                    ; SO MULTIPLY AX BY 10
  2453.          POP   DX
  2454.          MOV   BL,DS:[BP]            ; FETCH ASCII CODE,
  2455.          AND   BX,0FH                ; SAVE ONLY HIGH BITS,
  2456.          ADD   AX,BX                 ; AND UPDATE PARTIAL RESULT
  2457.          JC    END_CONV              ; EXIT IF RESULT IS TOO BIG
  2458.          INC   BP                    ; OTHERWISE, INCREMENT
  2459.          LOOP  CHK_PT                ; BP AND CONTINUE
  2460.          CLC                         ; WHEN DONE, CLEAR CARRY FLAG
  2461. END_CONV:  POP SI                    ; RESTORE REGISTERS
  2462.          POP   BX
  2463.          POP   BP
  2464.          RET
  2465. CONVERT  ENDP
  2466. CHKPRTR  PROC  NEAR
  2467.          PUSH  AX
  2468.          PUSH  DX
  2469.          TEST  AH,1
  2470.          JNZ   TIMEOUT
  2471.          TEST  AH,32
  2472.          JNZ   OUTPAPR
  2473.          TEST  AH,8
  2474.          JNZ   IOERR
  2475.          JMP   RTRN
  2476. IOERR:   MOV   AH,9
  2477.          LEA   DX,PERR
  2478.          INT   21H
  2479.          POP   DX
  2480.          POP   AX
  2481.          MOV   AH,99
  2482.          RET
  2483. TIMEOUT: PUSH  AX
  2484.          PUSH  DX
  2485.          MOV   AH,9
  2486.          LEA   DX,TOUT
  2487.          INT   21H
  2488. DRDK:    LEA   DX,BUFFER
  2489.          MOV   AL,2
  2490.          MOV   BUFFER,AL
  2491.          MOV   AH,10
  2492.          INT   21H
  2493.          POP   DX
  2494.          POP   AX
  2495.          INT   17H
  2496. RTRN:    POP   DX
  2497.          POP   AX
  2498.          RET
  2499. OUTPAPR: PUSH  AX
  2500.          PUSH  DX
  2501.          MOV   AH,9
  2502.          LEA   DX,OPAPR
  2503.          INT   21H
  2504.          JMP   DRDK
  2505. CHKPRTR  ENDP
  2506. JUS_CSEG ENDS
  2507.          END   JUS_PROC
  2508.